package com.dao;

import com.domain.User;
import com.utils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.sql.*;
import java.util.List;

public class UserDao {
    //创建jdbcTemplate对象
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 添加客户
     * @param user 传入User类型的对象
     * @return 返回Integer类型的数据 ，1为成功，0为失败
     */
    public Integer addUser(User user){
        //添加语句
        String sql="insert into User values(null,?,?,?,?,?)";
        int update = jdbcTemplate.update(sql,user.getUserName(),user.getPhone(),user.getPassword(),user.getAddress(),user.getGrader());
        return update;
    }

    /**
     * //根据id删除客户
     * @param user 传入Integer类型的数据
     * @return 返回Integer类型的数据 ，1为成功，0为失败
     */

    public Integer deleteUser(Integer user){
        //删除语句
        String sql="delete from User where Userid=?";
        //进行执行
        int update = jdbcTemplate.update(sql, user);
        //返回结果
        return update;
    }


    /**
     * 更新客户的数据
     * @param user 传入User类型的对象
     * @return 返回Integer类型的数据 ，1为成功，0为失败
     */
    public Integer updateUser(User user){
        //更新
        String sql="update User set UserName=?,phone=?,password=?,address=?,grader=? where UserId=?";
        int update = jdbcTemplate.update(sql,
                user.getUserName(),
                user.getPhone(),
                user.getPassword(),
                user.getAddress(),
                user.getGrader(),
                user.getUserId());
        return update;
    }

    /**
     * 查询方法,查询所有
     * @return 返回List类型的数据
     */
    public List<User> findAllUser(){
        //SQl
        String sql="select * from User";
        //new BeanPropertyRowMapper<>(Department.class)进行查询
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

        return list;
    }

    /**
     * 按照id查询客户数据
     * @param id 传入Integer类型的数据
     * @return 返回User类型的对象
     */
    public User findUser(Integer id){
        //sql
        String sql="select * from User where userid=?";
        //进行查询
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),id);
        if (list==null || list.size()==0){
            //没查到
            return null;
        }
        //查到
        return list.get(0);
    }

    /**
     * 按照phone 和 password查询客户数据
     * @param phone 传入String类型的客户号码
     * @param password 传入String类型的客户密码
     * @return 返回User类型的对象
     */
    public User findUser(String phone,String password){
        //sql
        String sql="select * from User where phone=? and password=?";
        //进行查询
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),phone,password);
        if (list==null || list.size()==0){
            //没查到
            return null;
        }
        //查到
        return list.get(0);
    }

    /**
     * userName 和 phone 查询客户数据
     * @param userName 传入String类型的客户姓名
     * @param phone 传入String类型的客户号码
     * @return 返回User类型的对象
     */
    public User findUserNamePass(String userName,String phone){
        //sql
        String sql="select * from User where username=? and phone=?";
        //进行查询
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),userName,phone);
        if (list==null || list.size()==0){
            //没查到
            return null;
        }
        //查到
        return list.get(0);
    }

    /**
     * 提供用户登录验证方法
     * @param phone 传入String类型的客户号码
     * @param password 传入String类型的客户密码
     * @return 返回User类型的对象
     */
    public User loginUser(String phone, String password) {
        String sql = "select * from user where phone=? and password=?";
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), phone, password);
        //只能有一个数据条
        if (list == null || list.size() == 0) {
            return null;
        } else {
            //返回第一条数据
            return list.get(0);
        }
    }

    /**
     * 修改客户自己的密码
     * @param password String 类型的用户号码
     * @param userName String 类型的用户姓名
     * @param phone String 类型的用户电话
     * @return Integer类型的数据，1为成功，0为未成功
     */
    public Integer updateUserPass(String password ,String userName,String phone){
        String sql = "update employee set password=? where userName=? and phone=?";
        int update = jdbcTemplate.update(sql, password, userName, phone);
        return update;
    }

}
